// //
// import 'package:cookie_jar/cookie_jar.dart';
// import 'package:dib_app/common/utils/config.dart';
// import 'package:dio/dio.dart';
// import 'package:dio_cookie_manager/dio_cookie_manager.dart';
// import 'package:dib_app/common/utils/event_bus.dart';
// import 'package:dib_app/common/utils/storage.dart';
// import 'package:dib_app/public/toast.dart';
// import 'package:connectivity/connectivity.dart';

// var deviceId;
// var deviceType;
// var deviceVer;
// var lang;
// var token;
// String cutoffinternetzh = "无法连接网络，请检查网络设置或稍后重试";
// String cutoffinterneten =
//     "Unable to connect to network. Please check network Settings or try again later";

// String timeout1zh = "连接超时";
// String timeout1en = "Connection timeout";

// String timeout2zh = "请求超时";
// String timeout2en = "Request timeout";

// String timeout3zh = "响应超时";
// String timeout3en = "Response timeout";

// String timeout4zh = "请求出错";
// String timeout4en = "Request error";

// String timeout5zh = "请求取消";
// String timeout5en = "The request to cancel";

// class HttpUtil {
//   static HttpUtil instance;
//   Dio dio;
//   BaseOptions options;

//   CancelToken cancelToken = new CancelToken();

//   static HttpUtil getInstance() {
//     if (null == instance) instance = new HttpUtil();
//     return instance;
//   }

//   static Future<bool> _isOnline() async {
//     var connectivityResult = await Connectivity().checkConnectivity();
//     return connectivityResult != ConnectivityResult.none;
//   }

//   /*
//    * config it and create
//    */
//   HttpUtil() {
//     //BaseOptions、Options、RequestOptions 都可以配置参数，优先级别依次递增，且可以根据优先级别覆盖参数
//     options = new BaseOptions(
//       //请求基地址,可以包含子路径
//       baseUrl: BaseConfig.BASEURL,
//       //连接服务器超时时间，单位是毫秒.
//       connectTimeout: 30000,
//       //响应流上前后两次接受到数据的间隔，单位为毫秒。
//       receiveTimeout: 20000,
//       //Http请求头.
//       headers: {},
//       //请求的Content-Type，默认值是[ContentType.json]. 也可以用ContentType.parse("application/x-www-form-urlencoded")
//       contentType: Headers.jsonContentType,
//       // contentType: 'multipart/form-data',
//       //表示期望以那种格式(方式)接受响应数据。接受三种类型 `json`, `stream`, `plain`, `bytes`. 默认值是 `json`,
//       responseType: ResponseType.json,
//     );

//     dio = new Dio(options);

//     //Cookie管理
//     dio.interceptors.add(CookieManager(CookieJar()));
//     var storage = new Storages();
//     var isnotloading;
//     var ishint;
//     var isjiyan;
//     var flagtologin;

//     //添加拦截器
//     dio.interceptors.add(
//       InterceptorsWrapper(
//         onRequest: (RequestOptions options) {
//           isnotloading = options.queryParameters['isnotloading'];
//           ishint = options.queryParameters['ishint'];
//           isjiyan = options.queryParameters['isjiyan'];
//           flagtologin = options.queryParameters['flagtologin'];

//           if (isnotloading != 'isnotloading') {
//             eventBus.fire(MyLoadingEvent(true));
//           }
//           storage
//               .getStoragemore(
//                   'token', 'lang', "device_id", "device_ver", "device_type")
//               .then((v) {
//             if (v['key2'] == null) {
//               lang = 'zh';
//             } else {
//               lang = v['key2'];
//             }
//             if (v['key1'] == null) {
//               token = 'lang=$lang';
//             } else {
//               token = 'token=' + v['key1'] + ';lang=$lang';
//             }
//             deviceId = v['key3'];
//             deviceVer = v['key4'];
//             deviceType = v['key5'];
//             options.headers['Cookie'] = token;
//             options.headers['device'] = 'app';
//             return options;
//           });
//         },
//         onResponse: (Response response) {
//           // print("响应之前");
//           // print(response);
//           if (isjiyan == 'isjiyan') {
//             if (isnotloading != 'isnotloading') {
//               eventBus.fire(MyLoadingEvent(false));
//             }
//             return response;
//           }

//           if (isnotloading != 'isnotloading') {
//             eventBus.fire(MyLoadingEvent(false));
//           }
//           if (response.data['code'] == 0 && ishint == 'ishint') {
//             HandleToast().showHandleToast(response.data['msg']);
//           } else if (response.data['code'] != 0 &&
//               response.data['code'] != 4105) {
//             HandleToast().showHandleToast(response.data['msg']);
//           }
//           if (response.data['code'] == 4105 ||
//               response.data['code'] == 4003 ||
//               response.data['code'] == 4504) {
//             // token 失效
//             eventBus.fire(MyLoginEvent('inputTxt'));
//           }
//           return response;
//         },
//         onError: (DioError e) async {
//           if (isnotloading != 'isnotloading') {
//             eventBus.fire(MyLoadingEvent(false));
//           }
//           if (flagtologin == 'flagtologin') {
//             eventBus.fire(MyLoginEvent('inputTxt'));
//           }
//           if (await _isOnline()) {
//             formatError(e);
//           } else {
//             String cutoffinternet =
//                 lang == 'en' ? cutoffinterneten : cutoffinternetzh;
//             HandleToast().showHandleToast(cutoffinternet);
//           }
//           return e;
//         },
//       ),
//     );

// //    (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
// //        (client) {
// //      client.findProxy = (uri) {
// //        return "PROXY localhost:8888";
// //      };
// //    };
//   }

//   /*
//    * get请求
//    */
//   get(url, {data, options, cancelToken}) async {
//     Response response;
//     var mapData = data ?? <String, dynamic>{};

//     try {
//       if (deviceId != null && deviceVer != null && deviceType != null) {
//         mapData['app_ver'] = BaseConfig.VERSION;
//         mapData['device_id'] = deviceId;
//         mapData['device_type'] = deviceType;
//         mapData['device_ver'] = deviceVer;
//         mapData['lang'] = lang;
//       }
//       response = await dio.get(
//         url,
//         queryParameters: mapData,
//         options: options,
//         cancelToken: cancelToken,
//       );

// //      response.data; 响应体
// //      response.headers; 响应头
// //      response.request; 请求体
// //      response.statusCode; 状态码

//     } on DioError catch (e) {
//       print('get error---------url:$url error:$e');
//     }
//     return response.data;
//   }

//   /*
//    * post请求
//    */
//   post(url, {query, data, options, cancelToken}) async {
//     Response response;
//     FormData formData;
//     if (data != null) {
//       formData = new FormData.fromMap(data);
//     }

//     try {
//       response = await dio.post(url,
//           queryParameters: query,
//           data: formData,
//           options: options,
//           cancelToken: cancelToken);
//     } on DioError catch (e) {
//       print('post error---------$e');
//     }
//     return response.data;
//   }

//   /*
//    * put请求
//    */
//   put(url, {query, data, options, cancelToken}) async {
//     Response response;
//     try {
//       response = await dio.put(url,
//           queryParameters: query,
//           data: data,
//           options: options,
//           cancelToken: cancelToken);
//     } on DioError catch (e) {
//       print('post error---------$e');
//     }
//     return response.data;
//   }

//   /*
//    * patch请求
//    */
//   patch(url, {query, data, options, cancelToken}) async {
//     Response response;
//     try {
//       response = await dio.patch(url,
//           queryParameters: query,
//           data: data,
//           options: options,
//           cancelToken: cancelToken);
//     } on DioError catch (e) {
//       print('post error---------$e');
//     }
//     return response.data;
//   }

//   /*
//    * delete请求
//    */
//   delete(url, {query, data, options, cancelToken}) async {
//     Response response;
//     try {
//       response = await dio.delete(url,
//           queryParameters: query,
//           data: data,
//           options: options,
//           cancelToken: cancelToken);
//     } on DioError catch (e) {
//       print('post error---------$e');
//     }
//     return response.data;
//   }

//   /*
//    * error统一处理
//    */
//   void formatError(DioError e) {
//     if (e.type == DioErrorType.CONNECT_TIMEOUT) {
//       // It occurs when url is opened timeout.
//       String timeout1 = lang == 'en' ? timeout1en : timeout1zh;
//       HandleToast().showHandleToast(timeout1);
//     } else if (e.type == DioErrorType.SEND_TIMEOUT) {
//       // It occurs when url is sent timeout.
//       String timeout2 = lang == 'en' ? timeout2en : timeout2zh;
//       HandleToast().showHandleToast(timeout2);
//     } else if (e.type == DioErrorType.RECEIVE_TIMEOUT) {
//       //It occurs when receiving timeout
//       String timeout3 = lang == 'en' ? timeout3en : timeout3zh;
//       HandleToast().showHandleToast(timeout3);
//     } else if (e.type == DioErrorType.RESPONSE) {
//       // When the server response, but with a incorrect status, such as 404, 503...
//       String timeout4 = lang == 'en' ? timeout4en : timeout4zh;
//       HandleToast().showHandleToast(timeout4);
//     } else if (e.type == DioErrorType.CANCEL) {
//       // When the request is cancelled, dio will throw a error with this type.
//       String timeout5 = lang == 'en' ? timeout5en : timeout5zh;
//       HandleToast().showHandleToast(timeout5);
//     } else {
//       String timeout4 = lang == 'en' ? timeout4en : timeout4zh;
//       HandleToast().showHandleToast(timeout4);
//     }
//   }

//   /*
//    * 取消请求
//    *
//    * 同一个cancel token 可以用于多个请求，当一个cancel token取消时，所有使用该cancel token的请求都会被取消。
//    * 所以参数可选
//    */
//   void cancelRequests(CancelToken token) {
//     token.cancel("cancelled");
//   }
// }
